package com.lxk.mall.pms.domain.bo.comment;

import com.lxk.mall.pms.domain.PmsProductComment;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;

import java.util.Date;

/**
 * 商品评论业务对象 pms_product_comment
 *
 * @author Lion Li
 * @date 2024-06-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PmsProductComment.class, reverseConvertGenerate = false)
public class PmsProductCommentBo extends BaseEntity {

    /**
     * 评论编号，主键自增
     */
    @NotNull(message = "评论编号，主键自增不能为空", groups = {EditGroup.class})
    private Long id;

    /**
     * 评价人的用户编号，关联 MemberUserDO 的 id 编号
     */
//    @NotNull(message = "评价人的用户编号，关联 MemberUserDO 的 id 编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long userId;

    /**
     * 评价人名称
     */
    @NotBlank(message = "评价人名称不能为空", groups = {AddGroup.class, EditGroup.class})
    private String userNickname;

    /**
     * 评价人头像
     */
    @NotBlank(message = "评价人头像不能为空", groups = {AddGroup.class, EditGroup.class})
    private String userAvatar;

    /**
     * 是否匿名
     */
//    @NotNull(message = "是否匿名不能为空", groups = { AddGroup.class, EditGroup.class })
    private Boolean anonymous;

    /**
     * 交易订单编号，关联 TradeOrderDO 的 id 编号
     */
//    @NotNull(message = "交易订单编号，关联 TradeOrderDO 的 id 编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long orderId;

    /**
     * 交易订单项编号，关联 TradeOrderItemDO 的 id 编号
     */
//    @NotNull(message = "交易订单项编号，关联 TradeOrderItemDO 的 id 编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long orderItemId;

    /**
     * 商品 SPU 编号，关联 ProductSpuDO 的 id
     */
    @NotNull(message = "商品 SPU 编号，关联 ProductSpuDO 的 id不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long spuId;

    /**
     * 商品 SPU 名称
     */
//    @NotBlank(message = "商品 SPU 名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String spuName;

    /**
     * 商品 SKU 编号，关联 ProductSkuDO 的 id 编号
     */
    @NotNull(message = "商品 SKU 编号，关联 ProductSkuDO 的 id 编号不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long skuId;

    /**
     * 图片地址
     */
    private String skuPicUrl;

    /**
     * 属性数组，JSON 格式 [{propertId: , valueId: }, {propertId: , valueId: }]
     */
    private String skuProperties;

    /**
     * 是否可见，true:显示false:隐藏
     */
    @NotNull(message = "是否可见，true:显示false:隐藏不能为空", groups = {EditGroup.class})
    private Boolean visible;

    /**
     * 评分星级1-5分
     */
    private Integer scores;

    /**
     * 描述星级 1-5 星
     */
    @NotNull(message = "描述星级 1-5 星不能为空", groups = {AddGroup.class, EditGroup.class})
    private Integer descriptionScores;

    /**
     * 服务星级 1-5 星
     */
    @NotNull(message = "服务星级 1-5 星不能为空", groups = {AddGroup.class, EditGroup.class})
    private Integer benefitScores;

    /**
     * 评论内容
     */
    @NotBlank(message = "评论内容不能为空", groups = {AddGroup.class, EditGroup.class})
    private String content;

    /**
     * 评论图片地址数组
     */
    //@NotBlank(message = "评论图片地址数组不能为空", groups = { AddGroup.class, EditGroup.class })
    private String picUrls;

    /**
     * 商家是否回复
     */
//    @NotNull(message = "商家是否回复不能为空", groups = { AddGroup.class, EditGroup.class })
    private Boolean replyStatus;

    /**
     * 回复管理员编号，关联 AdminUserDO 的 id 编号
     */
//    @NotNull(message = "回复管理员编号，关联 AdminUserDO 的 id 编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long replyUserId;

    /**
     * 商家回复内容
     */
    @NotBlank(message = "商家回复内容不能为空", groups = {EditGroup.class})
    private String replyContent;

    /**
     * 商家回复时间
     */
    @NotNull(message = "商家回复时间不能为空", groups = {EditGroup.class})
    private Date replyTime;


}
